package com.xxr.mom.ci.charging.interworking.base;

import com.xxr.mom.ci.charging.interworking.dto.InterworkingConfigDto;
import com.xxr.mom.ci.charging.interworking.entity.InterworkingConfig;
import com.xxr.mom.ci.common.dto.InterworkingParam;

/**
 * 对方请求我放接口
 * @description: InterfaceAccepter
 * @date: 2024/8/24 0:00
 * @author: natsuki_kining
 * @version: 1.0
 */
public interface InterfaceAccepter<R, P> extends InterworkingInterface<R, P> {

    /**
     * 对方请求我方
     *
     * @param interworkingParam 参数
     * @param configDto         互联互通配置
     * @return 返回给对方结果
     */
    default P accept(InterworkingParam interworkingParam, InterworkingConfigDto configDto) {
        R r = decodeToR(configDto.getInterworkingConfig().getDecode(), interworkingParam.getData());
        validateRequestParam(r);
        return this.dataHandler(r, configDto);
    }

    /**
     * 数据处理
     *
     * @param r         请求参数
     * @param configDto 互联互通配置
     * @return 返回给对方结果
     */
    P dataHandler(R r, InterworkingConfigDto configDto);

    /**
     * 校验签名
     *
     * @param interworkingParam InterworkingParam
     * @param configDto         InterworkingConfigDto
     */
    default void validateSign(InterworkingParam interworkingParam, InterworkingConfigDto configDto) {
        InterworkingConfig interworkingConfig = configDto.getInterworkingConfig();
        String sign = getSign(interworkingParam, interworkingConfig.getOperatorSigSecret());
//        Assert.equals(interworkingParam.getSig(), sign, () -> {
//            throw new InterworkingException(InterworkingRetEnum.SIGN_ERROR);
//        });
    }

    /**
     * 校验token
     *
     * @param token             从请求头中获取的token
     * @param interworkingParam 请求参数
     * @param configDto         互联互通配置
     */
    void validateToken(String token, InterworkingParam interworkingParam, InterworkingConfigDto configDto);

}
